/*
 Автор: Швейкин Евгений Юрьевич
 Имя модуля: edge_data_latch


 Функциональное описание:     
    Модуль захватывает данные с входной шини по 2 фронтам входного сигнала.
    
*/
//--------------------------------------------------------------------------------------------------

// *********************** НАЧАЛО МОДУЛЯ ***********************************************************
module edge_data_latch

(

    input  logic            reset_n,
    input  logic            clk,
    
    input  logic            oeb,
    input  logic            data_clk,
    input  logic [7:0]      data_i,

    output logic [15:0]     data_o,
    output logic            valid
);

// ********************** МАКРОСЫ ******************************************************************
    // Описывает процесс модуля выделения фронтов сигнала. 
    // Так же описывает создание новых сигналов с именем <имя сигнала> + <_rise> (<_fall>, <_edge>)
    `define front(clk, name)                    \
    logic name``_0;                             \
    logic name``_1;                             \
    logic name``_rise;                          \
    logic name``_fall;                          \
    logic name``_edge;                          \
    always_ff @(posedge clk)                    \
    begin                                       \
        name``_0 <= name;                       \
        name``_1 <= name``_0;                   \
        name``_rise <= name``_0 & (~name``_1);  \
        name``_fall <= name``_1 & (~name``_0);  \
        name``_edge <= name``_0 ^ name``_1;     \
    end
//  ********************* КОНСТАНТЫ ****************************************************************

    
//  ********************* ТИПЫ ДАННЫХ **************************************************************

//  ********************* ПЕРЕМЕННЫЕ ***************************************************************

// ********************* INITIAL *******************************************************************

//  ********************* ФУНКЦИИ ******************************************************************

//  ********************* ASSIGN *******************************************************************
    
// ********************* ПРОЦЕССЫ ******************************************************************
    `front (clk, data_clk)


        
// ********************* ПОДКЛЮЧАЕМЫЕ МОДУЛИ *******************************************************
   
endmodule 